# 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。
#  例如，对于 num = 1321 ，数组形式是 [1,3,2,1] 。
#  给定 num ，整数的 数组形式 ，和整数 k ，返回 整数 num + k 的 数组形式 。
#
#  示例 1：
# 输入：num = [1,2,0,0], k = 34
# 输出：[1,2,3,4]
# 解释：1200 + 34 = 1234
#
#  示例 2：
# 输入：num = [2,7,4], k = 181
# 输出：[4,5,5]
# 解释：274 + 181 = 455
#
#  示例 3：
# 输入：num = [2,1,5], k = 806
# 输出：[1,0,2,1]
# 解释：215 + 806 = 1021
from typing import List


class Solution:
    def addToArrayForm3(self, num: List[int], k: int) -> List[int]:
        """
        解法三：
        将整个加数加入数组表示的数的最低位，通过求余数计算留下来的数值，求除数计算进位数值；
        :param num:
        :param k:
        :return:
        """
        res, n, cur = [], len(num), k
        i = n
        while i - 1 >= 0 or cur > 0:
            i -= 1
            if i >= 0:
                cur += num[i]
            res.append(cur % 10)
            cur //= 10
        return res[::-1]

    def addToArrayForm2(self, num: List[int], k: int) -> List[int]:
        """
        解法二：将 k 转成 list，然后与 num 相加(和LeetCode67类似)，得到结果
        :param num:
        :param k:
        :return:
        """
        num2, res, carry = [], [], 0
        while k:
            num2.append(k % 10)
            k //= 10
        len1, len2 = len(num), len(num2)
        for i in range(max(len1, len2)):
            n1 = num[len1 - i - 1] if i < len1 else 0
            n2 = num2[i] if i < len2 else 0
            res.append((n1 + n2 + carry) % 10)
            carry = (n1 + n2 + carry) // 10
        if carry > 0:
            res.append(carry)
        return res[::-1]

    def addToArrayForm1(self, num: List[int], k: int) -> List[int]:
        """
        解法一，将num转成数字，然后与 k 相加，然后得到结果
        :param num:
        :param k:
        :return:
        """
        res, tmp = [], 0
        for n in num:
            tmp = tmp * 10 + n
        tmp += k
        while tmp != 0:
            res.append(tmp % 10)
            tmp //= 10
        return res[::-1]

    def addToArrayForm(self, num: List[int], k: int) -> List[int]:
        return self.addToArrayForm3(num, k)


if __name__ == '__main__':
    num, k = [1, 2, 0, 0], 34
    # num, k = [2, 7, 4], 181
    # num, k = [2, 1, 5], 806
    print(Solution().addToArrayForm(num, k))
